#pragma once

#include "../common/Log.hpp"
#include "../common/message.pb.h"
#include <string>
#include <unordered_map>
#include <memory>
#include <vector>
#include <mutex>
#include <functional>

namespace micromq
{
    using ConsumerCallback = std::function<void(const std::string&, const BasicProperties*, const std::string&)>;

    struct Consumer
    {
        using ptr = std::shared_ptr<Consumer>;
        
        Consumer()
        {}

        Consumer(const std::string& tag, const std::string& msgQueueName, bool autoAck, const ConsumerCallback& cb)
            : _tag(tag), _msgQueueName(msgQueueName), _autoAck(autoAck), _callback(cb)
        {}

        ~Consumer()
        {}
        
        std::string _tag;
        std::string _msgQueueName;
        bool _autoAck;
        ConsumerCallback _callback;
    };
}